package br.edu.ufcg.unknown.semantico.arvore;

import java.io.File;

import br.edu.ufcg.unknown.exception.UnknownException;
import br.edu.ufcg.unknown.lexico.AnalisadorLexico;
import junit.framework.TestCase;

public class NodoTest extends TestCase {

	private AnalisadorLexico al;

	private final File PALAVRAS_RESERVADAS = new File(
			"resources/palavras-reservadas.txt");

	@Override
	protected void setUp() throws Exception {
		super.setUp();
		assertTrue(PALAVRAS_RESERVADAS.exists());
	}

	public void testToStringSimples() throws UnknownException {

		init("3");
		Nodo t3 = new Nodo(al.getProxToken());
		assertEquals("(3)", t3.toString());

	}
	
	public void testToStringComplexo1() throws UnknownException {
		init("3 + 4");
		Nodo t3 = new Nodo(al.getProxToken());
		Nodo tMais = new Nodo(al.getProxToken());
		Nodo t4 = new Nodo(al.getProxToken());
		
		tMais.setFilhoEsquerda(t3);
		tMais.setFilhoDireita(t4);
		
		assertEquals("(+,(3)(4))", tMais.toString());
		
	}
	
	public void testToStringComplexo2() throws UnknownException {
		init("3 + 4 > 5 + 7");
		Nodo t3 = new Nodo(al.getProxToken());
		Nodo tMais1 = new Nodo(al.getProxToken());
		Nodo t4 = new Nodo(al.getProxToken());
		Nodo tMaior = new Nodo(al.getProxToken());
		Nodo t5 = new Nodo(al.getProxToken());
		Nodo tMais2 = new Nodo(al.getProxToken());
		Nodo t7 = new Nodo(al.getProxToken());
		
		tMaior.setFilhoEsquerda(tMais1);
		tMaior.setFilhoDireita(tMais2);
		
		tMais1.setFilhoEsquerda(t3);
		tMais1.setFilhoDireita(t4);

		tMais2.setFilhoEsquerda(t5);
		tMais2.setFilhoDireita(t7);

		assertEquals("(>,(+,(3)(4))(+,(5)(7)))", tMaior.toString());
		
	}

	private void init(String input) throws UnknownException {
		al = new AnalisadorLexico(input, PALAVRAS_RESERVADAS);
	}

}
